return {promise, callback};
}
+function _setupTransitionCompletion(transition, callback, prepare) {
+ const signalHolder = new SignalTracker.TransientSignalHolder(sessionSignalHolder);
+
+ const complete = finished => {
+ signalHolder.destroy();
+ callback(finished);
+ };
+
+ if (prepare) {
+ if (transition.delay)
+ transition.connectObject('started', () => prepare(), signalHolder);
+ else
+ prepare();
+ }
+
+ transition.connectObject('stopped', (_, finished) =>
+ complete(finished), signalHolder);
+}
+
function _makeEasePrepareAndCleanup(duration) {
if (!duration)
return {prepare: null, cleanup: null};
const [transition] = transitions;
- if (prepare) {
- if (transition?.delay)
- transition.connectObject('started', () => prepare(), sessionSignalHolder);
- else
- prepare();
- }
-
if (transition) {
- transition.connectObject('stopped', (t, finished) => {
- transition.disconnectObject(sessionSignalHolder);
- callback(finished);
- }, sessionSignalHolder);
+ _setupTransitionCompletion(transition, callback, prepare);
} else {
+ prepare?.();
callback(true);
}
transition.set_to(target);
- if (prepare) {
- if (transition.delay)
- transition.connectObject('started', () => prepare(), sessionSignalHolder);
- else
- prepare();
- }
+ _setupTransitionCompletion(transition, callback, prepare);
- transition.connectObject('stopped', (t, finished) => {
- transition.disconnectObject(sessionSignalHolder);
- callback(finished);
- }, sessionSignalHolder);
return promise;
}